package com.atguigu.gmall.order.service;
import com.atguigu.gmall.enums.model.ProcessStatus;
import com.atguigu.gmall.order.model.OrderInfo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Map;

/**
 * 购物车表 用户登录系统时更新冗余 业务接口类
 * @author atguigu
 * @since 2023-05-07
 */
@SuppressWarnings("all")
public interface OrderInfoService extends IService<OrderInfo> {

    /**
     * 汇总订单确认页面需要的数据
     * @param userId
     * @return
     */
    Map<String, Object> trade(Long userId);

    /**
     * 提交保存订单提交保存订单
     * @param orderInfo
     * @param tradeNo
     * @return
     */
    Long submitOrder(OrderInfo orderInfo, String tradeNo);

    /**
     * 生成流水号
     * @param userId
     * @return
     */
    String generateTradeNo(String userId);

    /**
     * 验证流水号是否一致
     * @param userId
     * @param tradeNo
     * @return
     */
    boolean checkTradeNo(String userId, String tradeNo);

    /**
     * 删除业务流水号
     * @param userId
     * @return
     */
    void deleteTradeNo(String userId);

    /**
     * 分页获取当前用户订单列表
     * @param infoPage
     * @param userId
     * @return
     */
    Page<OrderInfo> getOrderList(Page<OrderInfo> infoPage, String userId);

    /**
     * 关闭订单
     * @param orderId
     */
    void execExpiredOrder(Long orderId);

    /**
     * 根据订单id修改订单状态
     * @param orderId
     * @param processStatus
     */
    void updateOrderStatus(Long orderId, ProcessStatus processStatus);

    /**
     * 根据orderId查询订单信息,包含订单明细
     * @param orderId
     * @return
     */
    OrderInfo getOrderInfoByOrderId(Long orderId);

    /**
     * 发送小心给Mq通知第三方锁定库存
     * @param orderId
     */
    void sendDeductLockMsg(Long orderId);

    /**
     * 提供给库存系统拆单业务接口
     * @param orderId 订单id
     * @param wareSkuMap 系统查询到订单id和商品的对照关系, [{"wareId":"1","skuIds":["41"]},{"wareId":"2","skuIds":["26"]}]
     * @return 拆单后结果,包含每个订单对应每个仓库的id
     */
    String orderSplit(String orderId, String wareSkuMap);
}